package com.interview.rtc.aigc.controller;

import com.interview.rtc.aigc.common.ResponseResult;
import com.interview.rtc.aigc.dao.UserDao;
import com.interview.rtc.aigc.service.AIService;
import com.interview.rtc.aigc.service.AsyncJobService;
import com.interview.rtc.aigc.service.BiographicalNotesService;
import com.interview.rtc.aigc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;

/**
 * 简历上传和分析控制器
 */
@RestController
@RequestMapping("/api/resume")
public class ResumeController extends BaseController {

    @Autowired
    private BiographicalNotesService biographicalNotesService;

    @Autowired
    private UserService userService;

    @Autowired
    private AIService aiService;

    @Autowired
    private AsyncJobService asyncJobService;

    /**
     * 上传并分析简历
     *
     * @param file 上传的简历文件 (PDF或Word文档)
     * @return 简历分析结果
     */
    @PostMapping("/extract")
    public ResponseResult<HashMap<String, Object>> analyzeResume(@RequestParam("file") MultipartFile file) {
        try {
            // 获取当前用户ID
            Long userId = getUserId();
            if (userId == null) {
                return ResponseResult.error("用户未登录或ID无效");
            }
            
            // 检查文件类型
            String contentType = file.getContentType();
            if (contentType == null ||
                    (!contentType.equals("application/pdf") &&
                            !contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document") &&
                            !contentType.equals("application/msword"))) {
                return ResponseResult.error("不支持的文件类型，仅支持PDF或Word文档");
            }

            // 先提取文件内容
            String fileContent = biographicalNotesService.extractFileContent(file);

            // 获取用户信息
            UserDao user = userService.getUserById(userId);
            if (user != null) {
                // 更新用户状态为已上传待分析
                user.setResumeStatus(AsyncJobService.RESUME_STATUS_UPLOADED);
                userService.updateUser(user);
                
                // 异步分析简历并更新用户数据
                asyncJobService.analyzeResumeAndUpdateUser(fileContent, userId);
            }

            // 然后调用服务进行简历分析
            HashMap<String, Object> result = biographicalNotesService.analyzeResumeNodes(file);

            // 将提取的原始内容也添加到结果中
            result.put("rawContent", fileContent);

            return ResponseResult.success("简历分析成功，AI分析结果将在后台处理完成后更新", result);
        } catch (Exception e) {
            return ResponseResult.error("简历分析失败: " + e.getMessage());
        }
    }

    /**
     * 仅提取简历文件内容并异步分析
     *
     * @param file 上传的简历文件 (PDF或Word文档)
     * @return 提取的文本内容
     */
    @PostMapping("/analyze")
    public ResponseResult<String> extractResumeContent(@RequestParam("file") MultipartFile file) {
        try {
            Long userId = getUserId();
            if (userId == null) {
                return ResponseResult.error("用户未登录或ID无效");
            }
            
            // 检查文件类型
            String contentType = file.getContentType();
            if (contentType == null ||
                    (!contentType.equals("application/pdf") &&
                            !contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document") &&
                            !contentType.equals("application/msword"))) {
                return ResponseResult.error("不支持的文件类型，仅支持PDF或Word文档");
            }

            // 调用服务提取文件内容
            String fileContent = biographicalNotesService.extractFileContent(file);

            // 获取用户信息并更新状态
            UserDao user = userService.getUserById(userId);
            if (user != null) {
                // 更新用户状态为已上传待分析
                user.setResumeStatus(AsyncJobService.RESUME_STATUS_UPLOADED);
                userService.updateUser(user);
            }

            // 异步分析简历并更新用户数据
            asyncJobService.analyzeResumeAndUpdateUser(fileContent, userId);

            return ResponseResult.success("简历内容提取成功，AI分析将在后台进行", fileContent);
        } catch (Exception e) {
            return ResponseResult.error("简历内容提取失败: " + e.getMessage());
        }
    }
    
    /**
     * 获取用户简历状态
     *
     * @return 用户简历状态
     */
    @GetMapping("/status")
    public ResponseResult<Object> getResumeStatus() {
        try {
            Long userId = getUserId();
            if (userId == null) {
                return ResponseResult.error("用户未登录或ID无效");
            }
            
            UserDao user = userService.getUserById(userId);
            if (user == null) {
                return ResponseResult.error("用户不存在");
            }
            
            HashMap<String, Object> result = new HashMap<>();
            result.put("resumeStatus", user.getResumeStatus());
            
            // 如果简历已分析完成，则返回简历内容
            if (user.getResumeStatus() != null && user.getResumeStatus() == AsyncJobService.RESUME_STATUS_COMPLETED) {
                result.put("resume", user.getResume());
            }
            
            return ResponseResult.success("获取简历状态成功", result);
        } catch (Exception e) {
            return ResponseResult.error("获取简历状态失败: " + e.getMessage());
        }
    }
}
